﻿using System.Collections.Generic;
using System.Linq;
using System.Net.Mail;
using DemoPlena.Dominio;
using DemoPlena.Repositorio;

namespace DemoPlena.Persistencia
{
    public class UsuarioDao{
        //crio uma variavel -  Conecta do tipo ContextoDb - para receber o ContextoDb que irar conectar o banco
        public ContextoDb Conecta { get; set; }

        //preciso ter a referencia do Entity no projeto Quando Chamar o ContextoDb
        // construtor para chamar minha conexao com o banco
        public UsuarioDao(){
            Conecta = new ContextoDb();
        }

        public void Salvar(Usuario usuario){
               Conecta.Usuarios.Add(usuario);
               Conecta.SaveChanges();
         }
            
        public Usuario Logar(string email, string senha){
            // var acesso = Conecta.Usuarios.Where(x=>login.Email != null && x.Email == login.Email);
//            var acesso = Conecta.Usuarios.FirstOrDefault(u => u.Email.Equals(usuario.Email) && u.Senha.Equals(usuario.Senha));
//            if (acesso!= null){
//                return true;
//            }
            return Conecta.Usuarios.FirstOrDefault(u => u.Email.Equals(email) && u.Senha.Equals(senha));
            //return Conecta.Usuarios.FirstOrDefault(u => u.Email.Equals(usuario.Email) && u.Senha.Equals(usuario.Senha));
          //  IQueryable<Usuario> user = (from u in Conecta.Usuarios where u.Email == email && u.Senha == senha select u);
        }

        public IEnumerable<Usuario> Lista(){
           return Conecta.Usuarios.ToList();
         //   return Json(Conecta.Usuarios.ToList(), JsonRequestBehavior.AllowGet);
        }

        public Usuario CarregaDadosEditar(int id){
            return Conecta.Usuarios.Find(id);
        }

        public void Atualizar(Usuario usuario, int id){
            var objAux = Conecta.Set<Usuario>().Find(id);
            Conecta.Entry(objAux).CurrentValues.SetValues(usuario);
            Conecta.SaveChanges();
        }

        public Usuario Deletar(int id){
            return Conecta.Usuarios.Find(id);
        }

        public void Excluir(int id) {
           // Usuario usuarioExcluir = Conecta.Usuarios.First(x => x.IdUsuario == id);
            Usuario usuarioExcluir = Conecta.Usuarios.Find(id);
            Conecta.Set<Usuario>().Remove(usuarioExcluir);
            Conecta.SaveChanges();
        }
        public void EnviarEmail(string destinatario, string assunto, string mensagem, bool isBodyHtml = false)
        {
            var emailMessagem = new MailMessage();
            emailMessagem.To.Add(destinatario);
            emailMessagem.Subject = assunto;
            emailMessagem.Body = mensagem;
            emailMessagem.IsBodyHtml = isBodyHtml;

            var smtpClient = new SmtpClient { EnableSsl = false };
            smtpClient.Send(emailMessagem);
        }
//        public IEnumerable<Usuario> Buscar(string termo)
//        {
//            var result =
//                Conecta.Usuarios.Where(x => x.Nome.StartsWith(termo))
//                    .Select(x => new { x.IdUsuario, value = x.Nome })
//                    .Take(10)
//                    .ToArray();
//            return result;
//        }
        
    }
}
